<?php
/** Copyright 2014 TinPhp Systems, Inc.
 * @author zhangxilian 2013-8-20
 * @package TinPhp
 */
if (!defined('IN_TINPHP')) {
	exit ('Access Denied');
}
/**
 * Base视图类，/app/view/目录下的类必须继承该类
 * */
abstract class TinBaseView {
    public $db_type = "mysql";	//默认数据库类型
    public $table;		//表、视图名，多表可用array
    
	protected $nameAliasMap;	
	protected $tableStmt;		//实际表多个用逗号分开
	protected $tableStmtCond;	//多表时的表关联条件
	
	protected $tableLeftJoin;
	protected $seqOff = "on"; 	//默认开启SEQ序列,off关闭
	protected $tableSeq;		//Oracle系列名称
	protected $id = "ID";		//主键列名	
	protected $isPrefix = true;	//是否加入前缀,默认为true	
	
	/** 初始化类 */
	public function init() {
		//$this->genAliasNameMap();
		if (is_array($this->table)) {
			$tableNum = count($this->table);
			for ($i = 0; $i < $tableNum; $i++) {
				$this->tableStmt .= DB::DB_TABLE($this->table[$i], $this->isPrefix, $this->db_type);
				if ($i < $tableNum -1)
					$this->tableStmt .= ",";
			}
		} else {
			$this->tableStmt = DB::DB_TABLE($this->table, $this->isPrefix, $this->db_type);
		}
	}
	/** 获取表名，多个用逗号隔开 
	 * @return string 字符串
	 * */
	public function getTableStmt() {
		return $this->tableStmt;
	}
	/** 多表时的表关联条件 */
	public function getTableStmtCond() {
		return $this->tableStmtCond;
	}
	/** 
	 * 获取Left join 表名并且组成sql语句，如果未设置返回空 
	 * @return String 返回空或“ left join 表名 on 条件”
	 * */
	public function getTableLeftJoin() {
		$leftJoinSQL = "";
		if(count($this->tableLeftJoin)>0){
			foreach($this->tableLeftJoin as $k=>$v){
				$leftJoinSQL .= " left join ".DB::DB_TABLE($k, $this->isPrefix, $this->db_type)." on ".$v;
			}
		}
		return $leftJoinSQL;
	}
	/** 默认开启SEQ序列 */
	public function getSeqOff() {
		return $this->seqOff;
	}
	/** 获取Oracle系列名称 */
	public function getTableSeq() {
		return $this->tableSeq;
	}
	/** 获取是否多表 */
	public function isMultiple() {
		return is_array($this->table);
	}
	/** 获取主键列名 */
	public function getId() {
		return $this->id;
	}
	/** 获取对应视图列表 nameAliasMap参数
	 * */
	public function getNames() {
		if (count($this->nameAliasMap) > 0) {
			return array_values($this->nameAliasMap);
		} else {
			return '*';
		}
		//return array_keys($this->nameAliasMap);
	}
	
//=================以下的暂时没用的，如果需要可开启===========================================

//	public function aliasesToNames(& $zxData) {
//		$newData = new YyDataMap();
//
//		$keys = $zxData->getKeys();
//		foreach ($keys as $key) {
//			$n = $this->atn($key);
//			$v = $zxData->getValue($key);
//			$t = $zxData->getType($key);
//			$newData->addEntry($n, $v, $t);
//		}
//
//		$zxData->assign($newData);
//	}
//
//	public function namesToAliases($zxData) {
//		$this->aliasesToNames($zxData);
//	}
//
//	public function atn($alias) {
//		return $this->aliasToName($alias);
//	}
//
//	public function nta($name) {
//		return $this->nameToAlias($name);
//	}
//
//	public function getAliases($names = null) {
//		if ($names == null) {
//			return array_keys($this->aliasNameMap);
//		} else {
//			$aliases = array ();
//			foreach ($names as $name) {
//				$alias = $this->nameAliasMap[$name];
//				if (is_null($alias))
//					array_push($aliases, $name);
//				else
//					array_push($aliases, $alias);
//			}
//			return $aliases;
//		}
//	}
//
//	public function aliasToName($alias) {
//		$name = $this->aliasNameMap[$alias];
//		if (is_null($name))
//			return $alias;
//		else
//			return $name;
//	}
//
//	public function nameToAlias($name) {
//		$alias = $this->nameAliasMap[$name];
//		if (is_null($alias))
//			return $name;
//		else
//			return $alias;
//	}
//
//	protected function genAliasNameMap() {
//		$this->aliasNameMap = array ();
//		foreach ($this->nameAliasMap as $name => $alias) {
//			$this->aliasNameMap[$alias] = $name;
//		}
//
//	}

}//End Class
?>
